// Copyright (c) 2010, Anthony Cassidy
// All rights reserved.
// 
// Redistribution and use in source and binary forms, with or without modification, are 
// permitted provided that the following conditions are met:
// 
//     * Redistributions of source code must retain the above copyright notice, this list 
//         of conditions and the following disclaimer.
//     * Redistributions in binary form must reproduce the above copyright notice, this 
//         list of conditions and the following disclaimer in the documentation and/or 
//         other materials provided with the distribution.
//     * Neither the name of the AntsAdventureGameCreator nor the names of its contributors 
//         may be used to endorse or promote products derived from this software without 
//         specific prior written permission.
// 
// 
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY 
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 
// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT 
// SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 
// THE POSSIBILITY OF SUCH DAMAGE.
#include "XStdafx.h"
#include "RoomRegistry.h"
#include "AntsApi.h"
#include "InventoryItems.h"
#include "InventoryItem.h"
#include "ClientOnlyInclude.h"


/*
@cond
*/
RoomRegistry* g_pTheRoomMap;

bool RoomRegistry::RegisterRoom( IEventHandlers* mappingNum, const char* string)
{
    std::string stringToUseAsKey = std::string(QString(string).toLower().toAscii());
    g_pTheRoomMap->m_mapOfMaps.insert( stringToUseAsKey, mappingNum );

    return true;
}

IEventHandlers* RoomRegistry::At(int i)
{

    QMap<std::string,IEventHandlers*>::iterator iter = g_pTheRoomMap->m_mapOfMaps.begin();
    for(int j=0;j<i;j++)
    {
        iter++;
    }

    if(iter == g_pTheRoomMap->m_mapOfMaps.end())
    {
        ASSERT(false && "At(int) trying to access Room Not Registered!");
        return NULL;
    }

    return *iter;
}

IEventHandlers* RoomRegistry::At(QString string)
{
    std::string stringToUseAsKey = std::string(string.toLower().toAscii());
    QMap<std::string,IEventHandlers*>::iterator find_itr = g_pTheRoomMap->m_mapOfMaps.find(std::string(stringToUseAsKey));
    if (find_itr != g_pTheRoomMap->m_mapOfMaps.end())
    {
        return *find_itr;
    }
    ASSERT(false && "At(string) trying to access Room Not Registered!");
    return 0;
}

int RoomRegistry::Count()
{
    return g_pTheRoomMap->m_mapOfMaps.size();
}
/*!
@endcond
*/
